"""
__author__ = '霍格沃兹测试开发学社'
__desc__ = '更多测试开发技术探讨，请访问：https://ceshiren.com/t/topic/15860'
"""
from flask import request
from flask_jwt_extended import create_access_token
from flask_restx import Namespace, Resource

from model.user_model import User
from run import api, db, app, jwt

user_ns = Namespace("user manager", description="用户管理")


# user_ns.route添加的是子路由
@user_ns.route("/login")
class LoginServer(Resource):
    login_parser = api.parser()
    login_parser.add_argument('username', type=str, location="json", required=True, help="用户名不能为空")
    login_parser.add_argument('password', type=str, location="json", required=True, help="密码不能为空")

    # 通过 expect() 传递参数
    @user_ns.expect(login_parser)
    def post(self):
        """
        用户的登录
        :return:
        """
        request_data = request.json
        app.logger.info(request_data)
        # 请求的数据
        username = request_data.get("username")
        password = request_data.get("password")
        app.logger.info(f'username:{username},password:{password}')
        exist = User.query.filter_by(username=username).filter_by(password=password).first()
        app.logger.info(f'是否找到数据:{exist}')
        # 判断这个username和password是否存在，如果存在 则返回token，如果不存在 则返回用户或密码错误
        if exist:
            token = create_access_token(identity=username)
            return {"code": 200, "msg": f"{username} 已登录成功", "token": token}
        else:
            return {"code": 202, "msg": f"用户或密码错误", "res": request_data}

# user_ns.route添加的是子路由
@user_ns.route("/register")
class RegisterServer(Resource):
    login_parser = api.parser()
    login_parser.add_argument('username', type=str, location="json", required=True, help="用户名不能为空")
    login_parser.add_argument('password', type=str, location="json", required=True, help="密码不能为空")

    # 通过 expect() 传递参数
    @user_ns.expect(login_parser)
    def post(self):
        """
        用户的注册
        :return:
        """
        request_data = request.json
        app.logger.info(request_data)
        # 请求的数据
        username = request_data.get("username")
        exist = User.query.filter_by(username=username).first()
        app.logger.info(f'是否找到数据:{exist}')
        # 判断这个username是否存在，如果存在 则返回用户已注册，如果不存在 则进行注册
        if not exist:
            # 创建数据库实例
            user = User(**request_data)
            db.session.add(user)
            db.session.commit()
            return {"code": 200, "msg": f"{username} 创建成功", "res":request_data}
        else:
            return {"code": 201, "msg": f"用户已注册", "res": request_data}
